home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / util / gnu / groff_src.lha / Groff-1.07 / troff / dictionary.h < prev    next >
C/C++ Source or Header  |  1992-08-03  |  2KB  |  93 lines

  1. // -*- C++ -*-
  2. /* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
  3.      Written by James Clark (jjc@jclark.com)
  4.  
  5. This file is part of groff.
  6.  
  7. groff is free software; you can redistribute it and/or modify it under
  8. the terms of the GNU General Public License as published by the Free
  9. Software Foundation; either version 2, or (at your option) any later
  10. version.
  11.  
  12. groff is distributed in the hope that it will be useful, but WITHOUT ANY
  13. WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14. FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15. for more details.
  16.  
  17. You should have received a copy of the GNU General Public License along
  18. with groff; see the file COPYING.  If not, write to the Free Software
  19. Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
  20.  
  21.  
  22.  
  23. // there is no distinction between name with no value and name with NULL value
  24. // null names are not permitted (they will be ignored).
  25.  
  26. struct association {
  27.   symbol s;
  28.   void *v;
  29.   association() :  v(0) {}
  30. };
  31.  
  32. class dictionary;
  33.  
  34. class dictionary_iterator {
  35.   dictionary *dict;
  36.   int i;
  37. public:
  38.   dictionary_iterator(dictionary &);
  39.   int get(symbol *, void **);
  40. };
  41.  
  42. class dictionary {
  43.   int size;
  44.   int used;
  45.   double threshold;
  46.   double factor;
  47.   association *table;
  48.   void rehash(int);
  49. public:
  50.   dictionary(int);
  51.   void *lookup(symbol s, void *v=0); // returns value associated with key
  52.   void *lookup(const char *);
  53.   // if second parameter not NULL, value will be replaced
  54.   void *remove(symbol);
  55.   friend class dictionary_iterator;
  56. };
  57.  
  58. class object {
  59.   int rcount;
  60.  public:
  61.   object();
  62.   virtual ~object();
  63.   void add_reference();
  64.   void remove_reference();
  65. };
  66.  
  67. class object_dictionary;
  68.  
  69. class object_dictionary_iterator {
  70.   dictionary_iterator di;
  71. public:
  72.   object_dictionary_iterator(object_dictionary &);
  73.   int get(symbol *, object **);
  74. };
  75.  
  76. class object_dictionary {
  77.   dictionary d;
  78. public:
  79.   object_dictionary(int);
  80.   object *lookup(symbol nm);
  81.   void define(symbol nm, object *obj);
  82.   void rename(symbol oldnm, symbol newnm);
  83.   void remove(symbol nm);
  84.   int alias(symbol newnm, symbol oldnm);
  85.   friend class object_dictionary_iterator;
  86. };
  87.  
  88.  
  89. inline int object_dictionary_iterator::get(symbol *sp, object **op)
  90. {
  91.   return di.get(sp, (void **)op);
  92. }
  93.